package cn.lanca.gof16_20._18observer.case3;

/**
 * project name:<font size="1"><b>小芄健康数据运营平台</b></font><br>
 * file name:<font size="1"><b>DictTemplate</b></font><br>
 * description:<font size="1"><b>平台字典数据操作实现类</b></font><br>
 * company name:<font size="1"><b>小芄医药科技（成都）有限公司-研发中心</b></font><br>
 *
 * @author <a href="mail to: ">mei.hongliang<br>
 * @version 1.0.0<br>
 * @since 2022/3/2 16:20  <br>
 */

import com.example.demo.gof16_20._18observer.case1.BellEventListener;
import com.example.demo.gof16_20._18observer.case1.RingEvent;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * 漂亮女孩作为事件源
 */
public class BeautyGirl {

    /**
     * 舔狗列表
     */
    private List<TongueDogListener> list;

    public BeautyGirl() {
        list = new ArrayList<TongueDogListener>();
    }

    //给事件源绑定监听器
    public void addPersonListener(TongueDogListener tongueDogListener) {
        list.add(tongueDogListener);
    }

    //事件触发器：敲钟，当铃声sound的值发生变化时，触发事件。
    public void sick(GirlEvent e) {
        notifies(e);
    }
    //事件触发器：敲钟，当铃声sound的值发生变化时，触发事件。
    public void hunger(GirlEvent e) {
        notifies(e);
    }

    //当事件发生时,通知绑定在该事件源上的所有监听器做出反应（调用事件处理方法）
    protected void notifies(GirlEvent e) {
        TongueDogListener ren = null;
        Iterator<TongueDogListener> iterator = list.iterator();
        while (iterator.hasNext()) {
            ren = iterator.next();
            ren.takeCare(e);
        }
    }
}
